#ifndef TASKASSIGNER_H
#define TASKASSIGNER_H

#include <vector>
#include <string>
#include <vector>
#include <utility>

class TaskAssigner
{
public:
    int numEmployees;   // 员工数
    int numTasks;       // 任务数

    // 不满意度矩阵，表示每个员工对每个任务的不满意度
    std::vector<std::vector<int>> dissatisfaction;

    // 任务分配情况，任务j由哪些员工执行
    std::vector<std::vector<int>> taskAssignments;

    // 每个员工的任务分配情况，员工i执行了哪些任务
    std::vector<int> employeeAssignment;

    // 最小总不满意度的结果
    double minTotalDissatisfaction;

    // 记录最终任务分配方案
    std::vector<std::vector<int>> bestAssignments;

    // 构造函数，初始化员工数和任务数
    TaskAssigner(int employees, int tasks);

    // 从文件加载不满意度矩阵
    void loadDissatisfactionMatrix(const std::string& filename);

    // 计算当前任务分配的不满意度
    double calculateTotalDissatisfaction(int taskIndex);

    // 回溯法实现任务分配
    void backtrack(int taskIndex);

    // 执行任务分配
    void assignTasks();

    // 输出最终结果
    void displayResults();
};

#endif
